package main

import "fmt"

/*
panic(宕机)介绍

Go语言中目前（Go1.15）是没有异常机制，Go语言追求简洁优雅，Go没有像Java那样的try...catch...finally异常处理机制。Go语言设计者认为，将异常与流程
控制混在一起会让代码变得混乱。但是使用panic/recover模式来处理错误。panic可以在任何地方引发，但recover只有在defer调用的函数中有效。

panic()是一个内建函数，可以中断原有的控制流程。

TIPS:
 1. 向程序使用方报告错误状态的方式可以是返回一个额外的error类型值；
 2. 当遇到不可恢复的错误状态时，如数组访问越界、空指针引用等，这些运行时错误会引起panic异常。这时，上述错误处理方式显然就不适合了；
 3. 不应通过调用panic()函数来报告普通的错误，而应该只把它作为报告【致命错误】的一种方式。当某些不应该发生的场景发生时调用panic()；
 4. panic异常一旦被引发就会导致程序崩溃；
*/
func main() {

	funcA()
	funcB() // funcB() 发生异常，中断程序
	funcC()
}

func funcA() {

	fmt.Println("func funcA() 执行了")
}

func funcB() {

	panic(any("func funcB(): panic 执行了"))
}

func funcC() {

	fmt.Println("func funcC() 执行了")
}
